The Solid Principles For Object-Oriented Programming